package com.aotuman.ktcoroutineandroid.chapter.two

import kotlin.coroutines.*


/**
 * 1.创建一个Continuation对象
 *
 * 2.然后调用Continuation.kt对于suspend的lambda的扩展函数startCoroutine函数即可
 * （这里是对lambda对象扩展，不是函数你之后可以在这个lambda表达式中调用suspend函数）
 *
 * 3.suspend的lambda中调用其他suspend函数
 * 注意：suspend的lambda不等价suspend函数！！！！！
 *
 */
fun testOne(){

    val myCoroutineFun: suspend () -> String = {
        println("返回 hello结果")
        mySuspendFun()
    }

    val myContinuationImpl = MyContinuationImpl()

    // 启动协程（一）：createCoroutine + resume
    // 注意：suspend修饰的lambda不等价suspend函数！！！   错误写法：mySuspendFun().createCoroutine(myContinuationImpl)
    val createCoroutine = myCoroutineFun.createCoroutine(myContinuationImpl)
    createCoroutine.resume(Unit)

//    启动协程（二）：startCoroutine
//    myCoroutineFun.startCoroutine(myCoroutine)

}

fun testTwo() {
    suspend {
        println("返回 hello结果")
        mySuspendFun()
    }.startCoroutine(object : Continuation<String> {
        override val context: CoroutineContext
            get() = EmptyCoroutineContext

        override fun resumeWith(result: Result<String>) {
            println("ContinuationImpl 回调resumeWith 返回的结果 " + result.getOrNull())
        }
    })
}

suspend fun mySuspendFun(): String {
    return "hello"
}

fun main() {
    testTwo()
}